home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / dontorder < prev    next >
Text File  |  1997-01-31  |  4KB  |  283 lines

  1.  
  2. OrderZones:
  3.  
  4.  move.l ListOfGraphRooms,a0
  5. ; a0=list of rooms to draw.
  6.  
  7.  
  8.  move.l #ToDrawTab,a1
  9.  move.l a1,a3
  10.  
  11.  moveq #99,d0
  12.  moveq #0,d1
  13. .clrtab:
  14.  move.l d1,(a1)+
  15.  dbra d0,.clrtab
  16.  
  17.  move.l a0,a1
  18.  move.l #OrderTab,a5
  19.  
  20. settodraw:
  21.  move.l (a1),d0
  22.  blt.s nomoreset
  23.  
  24.  move.l d0,a2
  25.  move.w (a2),d0
  26.  st (a3,d0.w)
  27.  adda.w #10,a1
  28.  bra.s settodraw
  29.  
  30. nomoreset:
  31.  
  32. ; We now have a table with $ff rep.
  33. ; a room to be drawn at some stage.
  34.  
  35.  move.w ([a0]),d0
  36.  move.w d0,OrderTab+2+8
  37.  move.w #-1,OrderTab+4+8
  38.  move.w #0,OrderTab+8
  39.  move.w #1,OrderTab+6+8
  40.  move.w #1,OrderTab+4
  41.  move.w #-1,OrderTab
  42.  move.w #-1,OrderTab+2
  43.  move.w #2,d5 ; off end of list.
  44.  
  45.  move.w #7,d7    ; which ones to look
  46.          ; at.
  47.  
  48. OrderLoop:
  49.  
  50.  clr.b d6    ; flag for new zones
  51.          ; added.
  52.  
  53.  move.l #OrderTab,a5
  54.          
  55. RunThroughList:
  56.  
  57.  tst.w 6(a5)
  58.  bra.s anewone
  59.  
  60.  move.w 4(a5),d0
  61.  blt doneallthispass
  62.  move.l #OrderTab,a5    
  63.  lea (a5,d0.w*8),a5
  64.  bra RunThroughList
  65.  
  66. anewone:
  67.  
  68.  move.w #0,6(a5)
  69.  move.l #FloorLines,a1
  70.  
  71.  move.w 2(a5),d0
  72.  move.l #ZoneAdds,a0
  73.  move.l (a0,d0.w*4),a0
  74.  
  75.  adda.w #14,a0
  76. findexits:
  77.  move.w (a0)+,d0
  78.  bge.s findexits
  79.  addq #2,a0
  80.  
  81.  bsr InsertList
  82.  
  83.  move.w 4(a5),d0
  84.  blt doneallthispass
  85.  move.l #OrderTab,a5    
  86.  lea (a5,d0.w*8),a5
  87.  bra RunThroughList
  88.  
  89. doneallthispass:
  90.  
  91.  
  92.  tst.b d6
  93.  bne OrderLoop
  94.  
  95.  move.l #OrderTab,a5
  96.  move.w 4(a5),d0
  97.  lea (a5,d0.w*8),a5
  98.  
  99.  move.l #FinalOrder,a0
  100.  
  101. showorder:
  102.  move.w 2(a5),(a0)+
  103.  move.w 4(a5),d0
  104.  blt.s doneorder
  105.  move.l #OrderTab,a5
  106.  lea (a5,d0.w*8),a5
  107.  bra showorder
  108.  
  109. doneorder:
  110.  
  111.  move.l a0,endoflist
  112.  
  113.  move.w #-1,(a0)+
  114.  
  115.  rts
  116.  
  117. endoflist: dc.l 0
  118.  
  119. InsertList
  120.  
  121.  move.w (a0)+,d0    ; floor line
  122.  blt allinlist
  123.  
  124.  move.l #ToDrawTab,a3
  125.  
  126.  asl.w #4,d0
  127.  move.l 8(a1,d0.w),a2
  128.  move.w (a2),d1
  129.  tst.b (a3,d1.w)
  130.  beq notindrawlist
  131.  
  132. ; Here is a room in the draw list.
  133. ; Find out if it is further away
  134. ; or closer than the current zone.
  135.  
  136.  move.w xoff,d2
  137.  move.w zoff,d3
  138.  sub.w (a1,d0.w),d2
  139.  sub.w 2(a1,d0.w),d3
  140.  muls 6(a1,d0.w),d2
  141.  muls 4(a1,d0.w),d3
  142.  sub.l d3,d2
  143.  bge PutFurtherAway
  144.  
  145. ************************************** 
  146.  
  147.  bra PutDone
  148.  
  149. **************************************
  150.  
  151. PutFurtherAway:
  152.  
  153.  move.l a5,a4
  154.  
  155. .lookfurther:
  156.  move.w 4(a4),d0
  157.  blt.s .notfurther
  158.  move.l #OrderTab,a4
  159.  lea (a4,d0.w*8),a4
  160.  cmp.w 2(a4),d1
  161.  bne .lookfurther
  162.  
  163. ; Already in list so do nothing.
  164.  
  165.  bra .wasfurther
  166.  
  167. .notfurther:
  168.  
  169. ; Might be closer so check
  170.  
  171.  move.l a5,a3
  172.  
  173. .lookcloser:
  174.  move.w (a3),d0
  175.  blt .notcloser
  176.  move.l #OrderTab,a3
  177.  lea (a3,d0.w*8),a3
  178.  cmp.w 2(a3),d1
  179.  bne .lookcloser
  180.  
  181. ; Oh dear! it is closer!
  182. ; Have to get rid of it!
  183.  
  184.  move.l #OrderTab,a6
  185.  move.w 4(a3),d0
  186.  tst.w 6(a6,d0.w*8)
  187.  beq.s .nomoreafter
  188. .moreafter:
  189.  move.w 4(a6,d0.w*8),d0
  190.  tst.w 6(a6,d0.w*8)
  191.  bne.s .moreafter
  192.  
  193. .nomoreafter:
  194.  move.w (a6,d0.w*8),d0
  195.  move.l #OrderTab,a6
  196.  lea (a6,d0.w*8),a6 ; end of list
  197.  
  198.  move.w (a3),d0
  199.  move.w 4(a6),d2
  200.  move.l #OrderTab,a2
  201.  lea (a2,d2.w*8),a4
  202.  lea (a2,d0.w*8),a2
  203.  
  204.  move.w 4(a2),d3
  205.  move.w (a4),d4
  206.  
  207.  move.w d2,4(a2)
  208.  move.w d0,(a4)
  209.  
  210.  st d6
  211.  
  212.  move.w 4(a5),d0
  213.  blt.s .append
  214.  
  215.  move.l #OrderTab,a4
  216.  lea (a4,d0.w*8),a4
  217.  move.w d0,4(a6)
  218.  move.w (a4),(a3)
  219.  move.w d4,(a4)
  220.  move.w d3,4(a5)
  221.  
  222.  move.l a6,a5
  223.  
  224.  bra .wasfurther
  225.  
  226. .append
  227.  
  228.  move.w d0,4(a6)
  229.  move.w (a5),d0
  230.  move.w d3,4(a5)
  231.  move.l #OrderTab,a4
  232.  move.w 4(a4,d0.w*8),(a3)
  233.  
  234.  move.l a6,a5
  235.  
  236.  bra .wasfurther
  237.  
  238. .notcloser:
  239. ; Now insert it after current one.
  240.  move.l #OrderTab,a3
  241.  lea (a3,d5.w*8),a3
  242.  move.w d1,2(a3)
  243.  st 6(a3)
  244.  
  245.  move.w 4(a5),d0
  246.  blt.s .atfarend
  247.  move.l #OrderTab,a4
  248.  move.w d5,(a4,d0.w*8)
  249. .atfarend:
  250.  
  251.  move.w (a5),d0
  252.  move.l #OrderTab,a4
  253.  lea (a4,d0.w*8),a4
  254.  move.w 4(a4),(a3)
  255.  
  256.  move.w 4(a5),4(a3)
  257.  move.w d5,4(a5)
  258.  move.l a3,a5
  259.  
  260.  addq #1,d5
  261.  
  262.  st d6
  263.  
  264. .wasfurther:
  265.  
  266. *************************************
  267.  
  268. PutDone:
  269.  
  270. notindrawlist:
  271.  
  272.  bra InsertList
  273.  
  274. allinlist:
  275.  
  276.  rts
  277.  
  278. ToDrawTab:
  279.  ds.l 100
  280. OrderTab: ds.l 100
  281.  dc.w -1
  282. FinalOrder: ds.l 100
  283. doneone: dc.w 0